package com.ayz.gateway.center.domain.repository;



import com.ayz.gateway.center.infrastructure.notify.GatewayServiceSubscriber;
import com.ayz.gateway.common.constants.GatewayServiceData;

import java.util.List;

/**
 * @ClassName IGatewayServiceRepository
 * @Description TODO: 网关服务的存储中心
 * @Author 快乐的星球
 * @Date 2023/5/25 15:07
 * @Version 1.0
 **/
public interface IGatewayServiceRepository {
    /**
     * 向网关注册中心注册一个网关服务
     * @param gatewayServiceData 网关服务的基础信息类
     */
    public void registryGatewayService(GatewayServiceData gatewayServiceData);

    /**
     * 网关服务关闭时，会向网关注册中心注销网关服务
     * @param gatewayId
     */
    public void logoutGatewayService(String gatewayId);

    /**
     * 获取网关组下的所有网关服务
     * @param gatewayGroup 网关组的名称
     * @return
     */
    public List<GatewayServiceData> getGatewayServiceListByGroup(String gatewayGroup);

    /**
     * 添加一个网关服务的订阅者
     * @param gatewayId 网关服务的唯一标识Id
     * @param serviceSubscriber 网关服务的订阅者
     */
    public void addGatewayServiceSubscriber(String gatewayId, GatewayServiceSubscriber serviceSubscriber);

    /**
     * 是否存在指定的网关服务订阅者
     * @param gatewayId
     * @return
     */
    public boolean containsGatewayServiceSubscriber(String gatewayId);
    /**
     * 移除一个网关服务订阅者
     * @param gatewayId 网关的唯一ID
     */
    public void removeGatewayServiceSubscriber(String gatewayId);
    /**
     * 根据网关唯一标识符ID
     * 获取网关服务基础信息类
     * @param gatewayId
     * @return
     */
    public GatewayServiceData getGatewayServiceData(String gatewayId);
    /**
     * 定时任务，扫描那些超过指定时间没有心跳的网关服务，并进行服务剔除
     * @param gatewayServiceChannelExpiredTime
     */
    public void scanNotActiveGatewayService(long gatewayServiceChannelExpiredTime);
}
